import abc
"""
模块xjtusom_list(xjtusom_list.py)中定义了一个XjtusomList抽象数据类型，该抽象类型是一种线性表，具体的每个方法的功能描述见各方法的定义。
这个线性表只处理非负整数，且线性表中存储的元素各不相同，线性表中各方法的执行逻辑都隐含有这样的前提条件。

Authors:
    原盛（homework.xjtu@outlook.com）
Version: 1.0.0
Date: 2025-09-08

"""

class XjtusomList(metaclass=abc.ABCMeta):

    @abc.abstractmethod #定义抽象方法，无需实现功能
    def clear(self):
        """
        将当前的线性表清空
        Args:
        Returns:
            None
        """
        raise NotImplementedError

    @abc.abstractmethod
    def insert(self,item) -> bool:
        """
        向线性表中插入元素item，插入的位置根据实现该线性表的数据结构所设定的存储方式不同而不同
            如果存储方式是有序的顺序表，那么插入元素item应该保持该顺序表依然有序
            如果存储方式是无序的顺序表或者无序的单向链表，那么插入元素x的位置则由实现者自行决定
        还需要注意：因为该线性表要求存储的元素各不相同，所以在插入之前，要判断该元素是否已在线性表中存在
        Args:
            item(int):待插入的元素
        Returns:
            bool: True表示向线性表表中成功插入元素item，False表示线性表中已经包含相同的item元素或者线性表没有空闲空间可插入
        """
        raise NotImplementedError

    @abc.abstractmethod
    def search(self,item) -> bool:
        """
        在当前的线性表中查找元素item是否存在
        Args:
            item(int):待查找的元素
        Returns:
            bool: True表示线性表中包含元素item，False表示线性表中不包含元素item
        """
        raise NotImplementedError

    @abc.abstractmethod
    def delete(self,item) -> bool:
        """
        从当前线性表中删除元素item
        Args:
            item(int):待删除的元素
        Returns:
            bool: True表示从线性表中删除了元素itme，False表示线性表中不包含元素item，所以删除不成功
        """
        raise NotImplementedError

    @abc.abstractmethod
    def successor(self,item) -> int:
        """
        获得线性表中元素item的直接后继元素
        Args:
            item(int):待查找的元素item
        Returns:
            int: 如果元素item在线性表中存在且有直接后继，则返回该元素的直接后继元素值（这个值一定是大于等于零）
                 如果元素item不在线性表中，或者item元素没有直接后继，则返回-1
        """
        raise NotImplementedError

    @abc.abstractmethod
    def predecessor(self,item) -> int:
        """
        获得线性表中元素item的直接前驱元素
        Args:
            item(int):待查找的元素item
        Returns:
            int: 如果元素item在线性表中存在且有直接前驱，则返回该元素的直接前驱元素值（这个值一定是大于等于零）
                 如果元素item不在线性表中，或者item元素没有直接前驱，则返回-1
        """
        raise NotImplementedError

    @abc.abstractmethod
    def minimum(self) -> int:
        """
        获得线性表中的最小元素
        Args:

        Returns:
            int: 如果线性表不空，那么返回该线性表所有元素中的最小值
                 如果线性表空，则返回-1
        """
        raise NotImplementedError

    @abc.abstractmethod
    def maximum(self):
        """
        获得线性表中的最大元素
        Args:

        Returns:
            int: 如果线性表不空，那么返回该线性表所有元素中的最大值
                 如果线性表空，则返回-1
        """
        raise NotImplementedError

    @abc.abstractmethod
    def KthElement(self, k) -> int:
        """
        获得线性表中的第K小的元素，K的取值范围为[1,线性表的元素个数]
        Args:
            k(int): k应该是正数，且其值的范围为[1,线性表的元素个数]
        Returns:
            int: 如果线性表不空，且k的值在合理范围之内，那么返回线性表中的第k小的元素值
                 如果线性表不空，但k的值超出了合理范围，则返回-1
                 如果线性表空，则返回-1
        """
        raise NotImplementedError


